home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-04-13 | 33.5 KB | 2,236 lines |
-
- * the 'Hello World' program in 68000 Assembler
- * the C version can be found in the Intuition manual
-
- * this source code (C) HiSoft 1992 All Rights Reserved
-
- * for Devpac Amiga Version 2 the following symbols were changed
- * to avoid clashes with the new include files:
- * Screen->MyScreen, NewScreen->MyNewScreen
- * Window->MyWindow, NewWindow->MyNewWindow
-
- opt c+,d+
-
- include workbench:utilities/devpac/system use pre-assembled header
- include exec/exec_lib.i
- include intuition/intuition.i
- include intuition/intuition_lib.i
- include graphics/graphics_lib.i
- include graphics/text.i
-
- INTUITION_REV equ 31 v1.1
- GRAPHICS_REV equ 31 v1.1
-
- * Open the intuition library
-
- moveq #100,d4 default error return code
-
- moveq #INTUITION_REV,d0 version
- lea int_name(pc),a1
- CALLEXEC OpenLibrary
- tst.l d0
- beq exit_false if failed then quit
- move.l d0,_IntuitionBase else save the pointer
-
- moveq #GRAPHICS_REV,d0
- lea graf_name(pc),a1
- CALLEXEC OpenLibrary
- tst.l d0
- ; beq exit_closeint if failed then close Int, exit
- move.l d0,_GfxBase
-
- lea MyNewScreen(pc),a0
- CALLINT OpenScreen open a screen
- tst.l d0
- ; beq exit_closeall if failed the close both, exit
- move.l d0,MyScreen
-
- move.l MyScreen,a0
- lea sc_BitMap(a0),a0
- lea bm_Planes(a0),a0
- move.l #RAWSCRN,(a0)
- move.l #RAWSCRN+10240,4(a0)
- move.l #RAWSCRN+10240*2,8(a0)
- move.l #RAWSCRN+10240*3,12(a0)
- move.l #RAWSCRN+10240*4,16(a0)
- move.l #RAWSCRN+10240*5,20(a0)
- move.l #RAWSCRN+10240*6,24(a0)
- move.l #RAWSCRN+10240*7,28(a0)
-
- * now initialise a NewWindow structure. This is normally easier to
- * do with dc.w/dc.l statement etc, but for comparison with the C
- * version we do it like this
- lea MyNewWindow(pc),a0 good place to start
- move.w #20,nw_LeftEdge(a0)
- move.w #20,nw_TopEdge(a0)
- move.w #300,nw_Width(a0)
- move.w #100,nw_Height(a0)
- move.b #0,nw_DetailPen(a0)
- move.b #1,nw_BlockPen(a0)
- move.l #window_title,nw_Title(a0)
- _temp set WINDOWCLOSE!SMART_REFRESH!ACTIVATE!WINDOWSIZING
- move.l #_temp!WINDOWDRAG!WINDOWDEPTH,nw_Flags(a0)
- move.l #CLOSEWINDOW,nw_IDCMPFlags(a0)
- move.w #CUSTOMSCREEN,nw_Type(a0)
- clr.l nw_FirstGadget(a0)
- clr.l nw_CheckMark(a0)
- move.l MyScreen(pc),nw_Screen(a0)
- clr.l nw_BitMap(a0)
- move.w #100,nw_MinWidth(a0)
- move.w #25,nw_MinHeight(a0)
- move.w #640,nw_MaxWidth(a0)
- move.w #200,nw_MaxHeight(a0)
-
- * thats it set up, now open the window (a0=NewWindow already)
- ; CALLINT OpenWindow
- ; tst.l d0
- ; beq exit_closescr if failed
- ; move.l d0,MyWindow save it
- ;
- ; move.l d0,a1 window
- ; move.l wd_RPort(a1),a1 rastport
- ; moveq #20,d0 X
- ; moveq #20,d1 Y
- ; CALLGRAF Move move the cursor
- ;
- ; move.l MyWindow(pc),a0
- ; move.l wd_RPort(a0),a1 rastport
- ; lea hello_message(pc),a0
- ; moveq #11,d0
- ; CALLGRAF Text print something
- ;
- ; move.l MyWindow(pc),a0
- ; move.l wd_UserPort(a0),a0
- ; move.b MP_SIGBIT(a0),d1 (misprint in manual)
- ; moveq #0,d0
- ; bset d1,d0 do a shift
- ; CALLEXEC Wait
-
- ; moveq #0,d4 return code
-
- * various exit routines that do tidying up, given a return code in d4
-
- ; move.l MyWindow(pc),a0
- ; CALLINT CloseWindow
-
- ;exit_closescr
- ; move.l MyScreen(pc),a0
- ; CALLINT CloseScreen
-
- ;exit_closeall
- ; move.l _GfxBase(pc),a1
- ; CALLEXEC CloseLibrary
-
- ;exit_closeint
- ; move.l _IntuitionBase(pc),a1
- ; CALLEXEC CloseLibrary
-
- ;done:
- ; bra done
-
- move.l #PALETTEBIT,a0
- move.l #COPIEDPAL+4,a1
- move.w #255,d0
-
- copydown:
- move.b 1(a0),(a1)
- move.b 3(a0),4(a1)
- move.b 5(a0),8(a1)
- add.w #6,a0
- add.w #12,a1
- dbra d0,copydown
-
- move.w #256,COPIEDPAL
- move.w #0,COPIEDPAL+2
- LOOKFORME:
- move.l MyScreen,a0
- lea sc_ViewPort(a0),a0
- move.l #COPIEDPAL,a1
- move.l _GfxBase,a6
- jsr -$372(a6)
-
- move.l MyScreen,a4
- move.w sc_MouseX(a4),d0
- move.w sc_MouseY(a4),d1
- move.w d0,OLDXM
- move.w d1,OLDYM
-
- loop:
-
- move.l MyScreen,a4
- move.w sc_MouseX(a4),d0
- move.w sc_MouseY(a4),d1
-
- sub.w OLDXM,d0
- sub.w OLDYM,d1
- add.w d0,OLDXM
- add.w d1,OLDYM
-
- ; btst #6,$bfe001
- ; beq.s .SHIFTABOUT
-
-
-
- muls #8190,d0
- divs #160,d0
- add.w d0,YANG
- and.w #8190,YANG
- muls #8190,d1
- divs #160,d1
- and.w #8190,d1
- add.w d1,XANG
- and.w #8190,XANG
-
- add.w #40,AANG
- add.w #70,BANG
- and.w #8191,AANG
- and.w #8191,BANG
-
- add.w #60,CANG
- add.w #90,DANG
- and.w #8191,CANG
- and.w #8191,DANG
-
-
- bra .ROTABOUT
- .SHIFTABOUT
-
- add.w d0,XOFF
- add.w d1,ZOFF
-
-
- .ROTABOUT
-
- ************************************************
- ************************************************
- ************************************************
- ************************************************
- ************************************************
- ************************************************
- ************************************************
- ************************************************
- ************************************************
- ************************************************
- ************************************************
- ************************************************
- ************************************************
- ************************************************
-
- *SHADOW BUFFER CALCULATION
-
- move.w #254,HIGHPOLY
-
- move.l #POLYGONDATA,a0
- move.w (a0)+,d7 ; number of polys
- POLYGONLOOPSHAD:
- move.l d7,-(a7)
-
- move.w (a0)+,TEXTUREADD
- move.w (a0)+,d6
- move.w (a0)+,TRANSTEXT
-
- move.l #ROTATEDPTS,a2
- move.l #UVCOORDS,a3
-
- move.w AANG,d1
- move.w BANG,d3
- cmp.w #2,d6
- bne.s .notsecrot
- move.w CANG,d1
- move.w DANG,d3
- .notsecrot
- move.l #SINETABLE,a1
- move.w (a1,d1.w),XSIN ;xsin
- move.w (a1,d3.w),YSIN ;ysin
-
- add.w #2048,a1
- move.w (a1,d1.w),XCOS ;xcos
- move.w (a1,d3.w),YCOS ;ycos
-
- moveq #3,d7
- tst.w d6
- beq NOROTATESHAD
-
- ROTPTLOPSHAD:
-
- move.w (a0)+,d0
- move.w d0,d3
- move.w (a0)+,d1
- move.w (a0)+,d2
- move.w d2,d5
-
- muls YCOS,d0
- muls YSIN,d2
- sub.l d2,d0
- asr.l #6,d0 ; new x*512
-
- muls YSIN,d3
- muls YCOS,d5
- add.l d5,d3
- add.l d3,d3
- swap d3
- move.w d3,d2 ; new z
-
- move.w d1,d4
- move.w d2,d5
- muls XCOS,d1
- muls XSIN,d2
- sub.l d2,d1
- asr.l #6,d1 ; new y*512
-
- muls XSIN,d4
- muls XCOS,d5
- add.l d5,d4
- add.l d4,d4
- swap d4
- move.w d4,d2 ; new z
-
- ext.l d2
-
- move.w XOFF,d5
- ext.l d5
- asl.l #8,d5
- add.l d5,d5
- add.l d5,d0
-
- move.l d0,(a2)+
- move.l d1,(a2)+
- move.l d2,(a2)+
- addq #4,a2
-
- move.l (a0)+,(a3)+
-
- dbra d7,ROTPTLOPSHAD
-
- bra ROTATEDSHAD
-
- NOROTATESHAD:
- move.w (a0)+,d0
- move.w (a0)+,d1
- move.w (a0)+,d2
-
- ext.l d0
- ext.l d1
- ext.l d2
- asl.l #8,d0
- asl.l #8,d1
- asl.l #1,d0
- asl.l #1,d1
- move.l d0,(a2)+
- move.l d1,(a2)+
- move.l d2,(a2)+
- addq #4,a2
- move.l (a0)+,(a3)+
-
- dbra d7,NOROTATESHAD
-
- ROTATEDSHAD:
-
-
- move.l a0,-(a7)
-
- moveq #3,d7
- move.l #ROTATEDPTS,a0
-
- move.l #20000,d3 ;top
- move.l #-20000,d4 ;bottom
-
- move.l #-5000,d5
-
- FINDTB:
-
- move.l 8(a0),d0
- asr.l #2,d0
- cmp.l d0,d3
- ble.s .oktop
- move.l d0,d3
- .oktop:
- cmp.l d0,d4
- bge.s .okbot
- move.l d0,d4
- .okbot:
-
- move.l 4(a0),d0
- asr.l #8,d0
- asr.l #3,d0
- cmp.l d0,d5
- bgt.s .okhigh
- move.l d0,d5
- .okhigh:
-
- adda.w #16,a0
-
- dbra d7,FINDTB
-
- ; add.w #128,d5
- ; move.w d5,HIGHPOLY
-
- add.w #128,d3
- add.w #128,d4
- move.w d3,TOPLINE
- move.w d4,BOTLINE
-
- move.w #0,d0
- move.w #1,d1
- bsr SIMPLESHADLINE
- move.w #1,d0
- move.w #2,d1
- bsr SIMPLESHADLINE
- move.w #2,d0
- move.w #3,d1
- bsr SIMPLESHADLINE
- move.w #3,d0
- move.w #0,d1
- bsr SIMPLESHADLINE
-
- ***********************************************
- * Draw the shadow polygon
-
- move.l #SHADOWBUFFER,a2
- move.l #LEFTUVS,a0
- move.w TOPLINE,d0
- move.w BOTLINE,d1
- sub.w d0,d1
- asl.w #3,d0
- add.w d0,a0
- muls #(256/8),d0
- add.l d0,a2 ; pointer to screen line.
-
- subq #1,d1
- blt NOPOLYGONSHAD
-
- DOAHORLINESHAD:
- swap d1
-
- move.w RIGHTUVS-LEFTUVS(a0),d0
- move.w (a0)+,d7
- sub.w d7,d0
- blt NOPOLYGONSHAD
-
- move.l a2,-(a7)
-
- ; asr.w #2,d0
- ; asr.w #2,d7
- add.w d7,a2
- ext.l d0
- addq #1,d0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- move.w RIGHTUVS-LEFTUVS(a0),d7
- move.w (a0)+,d4
- swap d7
- clr.w d7
- swap d4
- clr.w d4
- sub.l d4,d7
- divs.l d0,d7
- move.l d7,a5
-
- move.w RIGHTUVS-LEFTUVS(a0),d7
- swap d7
- clr.w d7
- move.w (a0)+,d5
- swap d5
- clr.w d5
- sub.l d5,d7
- divs.l d0,d7
- move.l d7,a6
-
- move.w RIGHTUVS-LEFTUVS(a0),d7
- swap d7
- clr.w d7
- move.w (a0)+,d6
- swap d6
- clr.w d6
- sub.l d6,d7
- divs.l d0,d7
- move.l d7,a3
-
- move.l a0,-(a7)
- move.l d1,-(a7)
- move.l #TEXTURES,a0
- move.w TEXTUREADD,d7
- bge.s .okaddtes
- and.w #$7fff,d7
- add.l #65536,a0
- .okaddtes:
- add.w d7,a0
- move.w #0,d7
-
- subq #1,d0
-
- ; d0=xdist
- ; d4=U a5=DU
- ; d5=V a6=DV
- ; d6=Y a3=DY
- moveq #0,d1
-
- PLOTADOT:
-
- .across
-
- swap d4
- swap d5
- move.w d4,d2
- lsl.w #8,d2
- swap d4
- move.b d5,d2
- add.l a5,d4
- swap d5
- add.l a6,d5
-
-
- swap d6
- move.b (a2)+,d1
- tst.b (a0,d2.w*4)
- beq.s .noplt
- cmp.w d1,d6
- bgt.s .noplt
- move.b d6,-1(a2)
- .noplt:
- swap d6
- .noplty
- add.l a3,d6
-
- dbra d0,.across
-
- move.l (a7)+,d1
- move.l (a7)+,a0
- move.l (a7)+,a2
-
- .noline:
- add.w #256,a2
-
- swap d1
- dbra d1,DOAHORLINESHAD
-
- NOPOLYGONSHAD:
-
- ***********************************************
- move.l (a7)+,a0
- move.l (a7)+,d7
-
- sub.w #1,HIGHPOLY
- dbra d7,POLYGONLOOPSHAD
-
-
-
-
- ************************************************
- ************************************************
- ************************************************
- ************************************************
- ************************************************
- ************************************************
- ************************************************
- ************************************************
- ************************************************
- ************************************************
- ************************************************
- ************************************************
- ************************************************
- ************************************************
- ************************************************
- ************************************************
- ************************************************
-
- move.w #254,HIGHPOLY
-
- move.l #POLYGONDATA,a0
- move.w (a0)+,d7 ; number of polys
- POLYGONLOOP:
- move.l d7,-(a7)
-
- move.w (a0)+,TEXTUREADD
- move.w (a0)+,d6
- move.w d6,SPINAROUND
- move.w (a0)+,TRANSTEXT
- move.l #ROTATEDPTS,a2
- move.l #UVCOORDS,a3
-
-
-
- move.w AANG,d1
- move.w BANG,d3
- cmp.w #2,d6
- bne.s .notsecrot
- move.w CANG,d1
- move.w DANG,d3
- .notsecrot
- move.l #SINETABLE,a1
- move.w (a1,d1.w),XSIN ;xsin
- move.w (a1,d3.w),YSIN ;ysin
-
- add.w #2048,a1
- move.w (a1,d1.w),XCOS ;xcos
- move.w (a1,d3.w),YCOS ;ycos
-
- moveq #3,d7
- move.w d6,d0
- move.l #-5000,d6
- tst.w d0
- beq NOROTATE
-
-
- ROTPTLOP:
-
- move.w (a0)+,d0
- move.w d0,d3
- move.w (a0)+,d1
- move.w (a0)+,d2
- move.w d2,d5
-
- muls YCOS,d0
- muls YSIN,d2
- sub.l d2,d0
- asr.l #6,d0 ; new x*512
-
- muls YSIN,d3
- muls YCOS,d5
- add.l d5,d3
- add.l d3,d3
- swap d3
- move.w d3,d2 ; new z
-
- move.w d1,d4
- move.w d2,d5
- muls XCOS,d1
- muls XSIN,d2
- sub.l d2,d1
- asr.l #6,d1 ; new y*512
-
- muls XSIN,d4
- muls XCOS,d5
- add.l d5,d4
- add.l d4,d4
- swap d4
- move.w d4,d2 ; new z
-
-
- ext.l d2
-
- move.w XOFF,d5
- ext.l d5
- asl.l #8,d5
- add.l d5,d5
- add.l d5,d0
-
- move.l d0,(a2)+
- move.l d1,(a2)+
- move.l d2,(a2)+
- addq #4,a2
-
- move.l d1,d5
- asr.l #8,d5
- asr.l #3,d5
- cmp.w d5,d6
- bgt.s .okhigh
- move.w d5,d6
- .okhigh:
-
-
- move.l (a0)+,(a3)+
-
- dbra d7,ROTPTLOP
-
- bra ROTATED
-
- NOROTATE:
- move.w (a0)+,d0
- move.w (a0)+,d1
- move.w (a0)+,d2
-
- ext.l d0
- ext.l d1
- ext.l d2
- asl.l #8,d0
- asl.l #8,d1
- asl.l #1,d0
- asl.l #1,d1
- move.l d0,(a2)+
- move.l d1,(a2)+
- move.l d2,(a2)+
- addq #4,a2
- move.l (a0)+,(a3)+
-
- move.l d1,d5
- asr.l #8,d5
- asr.l #3,d5
- cmp.w d5,d6
- bgt.s .okhigh
- move.w d5,d6
- .okhigh:
-
- dbra d7,NOROTATE
-
- ROTATED:
-
- ; add.w #128,d6
- ; move.w d6,HIGHPOLY
-
- move.l a0,-(a7)
-
- sub.l #10*4,a0
-
- move.w XANG,d1
- move.w YANG,d3
- move.l #SINETABLE,a1
- move.w (a1,d1.w),XSIN2 ;xsin
- move.w (a1,d3.w),YSIN2 ;ysin
-
- add.w #2048,a1
- move.w (a1,d1.w),XCOS2 ;xcos
- move.w (a1,d3.w),YCOS2 ;ycos
-
-
-
- moveq #3,d7
- ; move.l #ROTATEDPTS,a0
- move.l #ONSCREENPTS,a1
- move.l FASTBUFFER,a2
-
- move.w #20000,d3 ;top
- move.w #-20000,d4 ;bottom
- move.w #-5000,d5
-
- CONVTOSCREEN:
-
- movem.l d3-d5,-(a7)
-
- move.w (a0)+,d0
- move.w d0,d3
- move.w (a0)+,d1
- move.w (a0)+,d2
- addq #4,a0
- move.w d2,d5
-
- tst.w SPINAROUND
- beq.s .NOSPIN
-
- muls YCOS,d0
- muls YSIN,d2
- sub.l d2,d0
- add.l d0,d0
- swap d0
- ; asr.l #6,d0 ; new x*512
-
-
- muls YSIN,d3
- muls YCOS,d5
- add.l d5,d3
- add.l d3,d3
- swap d3
- move.w d3,d2 ; new z
-
- move.w d1,d4
- move.w d2,d5
- muls XCOS,d1
- muls XSIN,d2
- sub.l d2,d1
- add.l d1,d1
- swap d1
-
- muls XSIN,d4
- muls XCOS,d5
- add.l d5,d4
- add.l d4,d4
- swap d4
- move.w d4,d2 ; new z
-
- move.w d0,d3
- move.w d2,d5
-
- .NOSPIN
-
- muls YCOS2,d0
- muls YSIN2,d2
- sub.l d2,d0
- asr.l #6,d0 ; new x*512
-
- muls YSIN2,d3
- muls YCOS2,d5
- add.l d5,d3
- add.l d3,d3
- swap d3
- move.w d3,d2 ; new z
-
- move.w d1,d4
- move.w d2,d5
- muls XCOS2,d1
- muls XSIN2,d2
- sub.l d2,d1
- asr.l #6,d1 ; new y*512
-
- muls XSIN2,d4
- muls XCOS2,d5
- add.l d5,d4
- add.l d4,d4
- swap d4
- move.w d4,d2 ; new z
-
- ; 3 7 15 21 35 45
-
- ext.l d2
- movem.l (a7)+,d3-d5
-
- ; move.l (a0)+,d0
- ; move.l (a0)+,d1
- ; move.l (a0)+,d2
-
- ; move.l d1,d6
- ; asr.l #8,d6
- ; asr.l #3,d6
- ; cmp.w d6,d5
- ; bgt.s .okhigh
- ; move.w d6,d5
- ;.okhigh:
-
- add.w ZOFF,d2
- ext.l d2
- ; addq #4,a0
-
- add.l d0,d0
- add.l d1,d1
-
- divs d2,d0
- divs d2,d1
- add.w #160*4,d0
- add.w #128*4,d1
- move.w d0,(a1)+
- move.w d1,(a1)+
-
- asr.w #2,d1
-
- cmp.w d1,d3
- ble.s .oktop
- move.w d1,d3
- .oktop
-
- cmp.w d1,d4
- bge.s .okbot
- move.w d1,d4
- .okbot:
-
- ; ext.l d0
- ; ext.l d1
- ; asr.l #2,d0
- ; and.b #%11111100,d1
- ; asl.l #4,d1
- ; move.l d1,d2
- ; asl.l #2,d1
- ; add.l d2,d1
- ; add.l d1,d0
- ;
- ; move.b #255,(a2,d0.l)
-
- dbra d7,CONVTOSCREEN
-
-
- move.w d3,TOPLINE
- move.w d4,BOTLINE
-
- move.l #ONSCREENPTS,a1
- move.w (a1),d0 ;x1
- sub.w 4(a1),d0
- move.w 8(a1),d2
- sub.w 4(a1),d2
-
-
- move.w 2(a1),d1 ;x1
- sub.w 6(a1),d1
- move.w 10(a1),d3
- sub.w 6(a1),d3
-
- muls d2,d1
- muls d0,d3
- sub.l d3,d1
- ble NOPOLYGON
-
- move.l #ROTATEDPTS,a1
- move.l (a1),d3
- sub.l 16(a1),d3
- asr.l #8,d3
- asr.l #1,d3
- move.l 4(a1),d4
- sub.l 16+4(a1),d4
- asr.l #8,d4
- asr.l #1,d4
- move.l 8(a1),d5
- sub.l 16+8(a1),d5
-
- move.w d3,d6
- muls d6,d6
- move.w d4,d7
- muls d7,d7
- add.l d7,d6
- move.w d5,d7
- muls d7,d7
- add.l d7,d6
- move.l d6,d2
- bsr CALCSQROOT
- move.w d2,LEN1
-
- move.l 32(a1),d0
- sub.l 16(a1),d0
- asr.l #8,d0
- asr.l #1,d0
- move.l 32+4(a1),d1
- sub.l 16+4(a1),d1
- asr.l #8,d1
- asr.l #1,d1
- move.l 32+8(a1),d2
- sub.l 16+8(a1),d2
-
- muls d2,d3
- muls d0,d5
- sub.l d3,d5 ; length
- muls.l #25,d5
-
- muls d0,d0
- muls d1,d1
- muls d2,d2
- add.l d0,d1
- add.l d1,d2
- bsr CALCSQROOT
-
- muls LEN1,d2
- divs.l d2,d5
-
- tst.l d5
- ble.s .okbr
- moveq #0,d5
- .okbr:
- add.w #25,d5
-
- asl.w #8,d5
- move.w d5,BRIGHTNESS
-
- move.w #0,d0
- move.w #1,d1
- bsr SIMPLECALCLINE
- move.w #1,d0
- move.w #2,d1
- bsr SIMPLECALCLINE
- move.w #2,d0
- move.w #3,d1
- bsr SIMPLECALCLINE
- move.w #3,d0
- move.w #0,d1
- bsr SIMPLECALCLINE
-
-
-
- ***********************************************
- * Draw the polygon (shadowed).
-
- move.l FASTBUFFER,a2
- move.l #LEFTUVS,a0
- move.w TOPLINE,d0
- move.w BOTLINE,d1
- sub.w d0,d1
- asl.w #4,d0
- add.w d0,a0
- muls #(320/16),d0
- add.l d0,a2 ; pointer to screen line.
-
- subq #1,d1
- blt NOPOLYGON
-
- DOAHORLINE:
- swap d1
-
- move.w RIGHTUVS-LEFTUVS(a0),d0
- move.w (a0)+,d7
- sub.w d7,d0
- bge.s .okflibble
-
- add.w #14,a0
- add.w #320,a2
- swap d1
- dbra d1,DOAHORLINE
- bra NOPOLYGON
-
- .okflibble:
-
- move.l a2,-(a7)
-
- asr.w #2,d0
- asr.w #2,d7
- add.w d7,a2
- ext.l d0
- addq #1,d0
-
- move.l RIGHTUVS-LEFTUVS(a0),d7
- move.l (a0)+,d2
- sub.l d2,d7
- divs.l d0,d7
- move.l d7,a1
-
- move.l RIGHTUVS-LEFTUVS(a0),d7
- move.l (a0)+,d3
- sub.l d3,d7
- divs.l d0,d7
- move.l d7,a4
-
- move.w RIGHTUVS-LEFTUVS(a0),d7
- move.w (a0)+,d4
- swap d7
- clr.w d7
- swap d4
- clr.w d4
- sub.l d4,d7
- divs.l d0,d7
- move.l d7,a5
-
- move.w RIGHTUVS-LEFTUVS(a0),d7
- swap d7
- clr.w d7
- move.w (a0)+,d5
- swap d5
- clr.w d5
- sub.l d5,d7
- divs.l d0,d7
- move.l d7,a6
-
- move.w RIGHTUVS-LEFTUVS(a0),d7
- swap d7
- clr.w d7
- move.w (a0)+,d6
- swap d6
- clr.w d6
- sub.l d6,d7
- divs.l d0,d7
- move.l d7,a3
-
- move.l a0,-(a7)
- move.l d1,-(a7)
- move.l #TEXTURES,a0
- move.w TEXTUREADD,d7
- bge.s .okaddtes
- and.w #$7fff,d7
- add.l #65536,a0
- .okaddtes:
- add.w d7,a0
- move.w #0,d7
-
- move.w BRIGHTNESS,a6
-
- move.l a7,SAVESTACK
- move.l #SHADOWBUFFER,a7
-
- subq #1,d0
-
- ; d0=xdist
- ; d2=U a1=DU
- ; d3=V a4=DV
- ; d4=X a5=DX
- ; d5=Y a6=DY
- ; d6=Z a3=DZ
- move.w HIGHPOLY,d5
-
- .across
-
- moveq #0,d1
- swap d6
- move.w d6,d1
- lsl.w #8,d1
- swap d4
- move.b d4,d1
- swap d4
- swap d6
- add.l a5,d4
- add.l a3,d6
-
- moveq #0,d7
- ; swap d5
- move.b (a7,d1.l),d7
- cmp.w d7,d5
- ble.s .noshad
- move.w #$1900,d7
- swap d2
- move.w d2,d1
- asl.w #8,d1
- swap d3
- move.b d3,d1
- swap d2
- ; and.w #$3f3f,d1
- swap d3
- add.l a1,d2
- add.l a4,d3
-
- move.b (a0,d1.w*4),d7
- beq.s .noplottt
-
- move.b TEXTUREPAL(pc,d7.w),(a2)+
- dbra d0,.across
- bra.s .PASTAC
-
- .noshad:
- ; swap d5
- ; add.l a6,d5
- move.w a6,d7
- swap d2
- move.w d2,d1
- asl.w #8,d1
- swap d3
- move.b d3,d1
- swap d2
- and.w #$3f3f,d1
- swap d3
- add.l a1,d2
- add.l a4,d3
-
- move.b (a0,d1.w*4),d7
- beq.s .noplottt
-
- move.b TEXTUREPAL(pc,d7.w),(a2)+
- dbra d0,.across
-
- bra.s .PASTAC
-
- .noplottt:
- addq #1,a2
- dbra d0,.across
-
- .PASTAC
-
- move.l SAVESTACK,a7
-
- move.l (a7)+,d1
- move.l (a7)+,a0
- move.l (a7)+,a2
-
- .noline:
- add.w #320,a2
-
- swap d1
- dbra d1,DOAHORLINE
-
-
- bra NOPOLYGON
-
- TEXTUREPAL: incbin "ab3:includes/newtexturemaps.pal"
-
- SAVESTACK: dc.l 0
- HIGHPOLY: dc.w 0
- LEN1: dc.w 0
- BRIGHTNESS: dc.l 0
- TRANSTEXT: dc.w 0
- AANG: dc.w 0
- BANG: dc.w 0
- CANG: dc.w 0
- DANG: dc.w 0
-
- NOPOLYGON:
-
- ***********************************************
- move.l (a7)+,a0
- move.l (a7)+,d7
-
- sub.w #1,HIGHPOLY
-
- dbra d7,POLYGONLOOP
-
- btst #6,$bfe001
- beq.s .SHOWSHADOW
-
- move.l FASTBUFFER,a0
- add.l #40*320+64,a0
- move.l #RAWSCRN+40*40+8,a1
- move.l #(24)-1,d0
- move.l #175,d1
- move.w #128,d2
- move.w #16,d3
- moveq #0,d4
- moveq #0,d5
- jsr CHUNKYTOPLANAR
-
- bra .SHOWNSCRN
-
- .SHOWSHADOW
-
- move.l #SHADOWBUFFER,a0
- add.l #40*256,a0
- move.l #RAWSCRN+40*40,a1
- move.l #(256/8)-1,d0
- move.l #175,d1
- move.w #0,d2
- move.w #8,d3
- moveq #0,d4
- moveq #0,d5
- jsr CHUNKYTOPLANAR
-
- .SHOWNSCRN:
-
- move.l FASTBUFFER,a0
- add.l #40*320,a0
-
- move.w #((320*176)/64)-1,d0
- moveq #0,d1
- clrchunk:
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- dbra d0,clrchunk
-
- move.l #SHADOWBUFFER,a0
- move.l #-1,d1
- move.l #-1,d2
- move.w #15,d0
- clrshad:
- move.w #15,d5
- innner
- move.l d2,(a0)+
- move.l d2,(a0)+
- move.l d2,(a0)+
- move.l d2,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d2,(a0)+
- move.l d2,(a0)+
- move.l d2,(a0)+
- move.l d2,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d2,(a0)+
- move.l d2,(a0)+
- move.l d2,(a0)+
- move.l d2,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d2,(a0)+
- move.l d2,(a0)+
- move.l d2,(a0)+
- move.l d2,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d2,(a0)+
- move.l d2,(a0)+
- move.l d2,(a0)+
- move.l d2,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d2,(a0)+
- move.l d2,(a0)+
- move.l d2,(a0)+
- move.l d2,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d2,(a0)+
- move.l d2,(a0)+
- move.l d2,(a0)+
- move.l d2,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d2,(a0)+
- move.l d2,(a0)+
- move.l d2,(a0)+
- move.l d2,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- move.l d1,(a0)+
- dbra d5,innner
- exg d1,d2
-
- dbra d0,clrshad
-
-
-
- btst #7,$bfe001
- beq.s exit_closescr
-
-
- add.l #$8000,lmxoff
- cmp.l #40*65536,lmxoff
- blt.s .oksm
- sub.l #40*65536,lmxoff
- .oksm
-
- bra loop
-
- lmxoff: dc.l 0
-
- exit_closescr
- move.l MyScreen(pc),a0
- CALLINT CloseScreen
-
- exit_closeall
- move.l _GfxBase(pc),a1
- CALLEXEC CloseLibrary
-
- exit_closeint
- move.l _IntuitionBase(pc),a1
- CALLEXEC CloseLibrary
-
- exit_false
- move.l #0,d0 return code
- rts
-
- *********************************************
-
- CALCSQROOT:
- tst.l d2
- beq .oksqr
-
- movem.l d0/d1/d3-d7/a0-a6,-(a7)
-
- move.w #31,d0
- .findhigh
- btst d0,d2
- bne .foundhigh
- dbra d0,.findhigh
- .foundhigh
- asr.w #1,d0
- clr.l d3
- bset d0,d3
- move.l d3,d0
-
- move.w d0,d1
- muls d1,d1 ; x*x
- sub.l d2,d1 ; x*x-a
- asr.l #1,d1 ; (x*x-a)/2
- divs d0,d1 ; (x*x-a)/2x
- sub.w d1,d0 ; second approx
- bgt .stillnot0
- move.w #1,d0
- .stillnot0
-
- move.w d0,d1
- muls d1,d1
- sub.l d2,d1
- asr.l #1,d1
- divs d0,d1
- sub.w d1,d0 ; second approx
- bgt .stillnot02
- move.w #1,d0
- .stillnot02
-
- move.w d0,d1
- muls d1,d1
- sub.l d2,d1
- asr.l #1,d1
- divs d0,d1
- sub.w d1,d0 ; second approx
- bgt .stillnot03
- move.w #1,d0
- .stillnot03
-
- move.w d0,d2
- ext.l d2
-
- movem.l (a7)+,d0/d1/d3-d7/a0-a6
-
- .oksqr
- rts
-
-
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
-
- SIMPLECALCLINE:
- move.l #ONSCREENPTS,a1
- move.w 2(a1,d0.w*4),d2 ;fy
- move.w 2(a1,d1.w*4),d7 ;sy
-
- move.l #RIGHTUVS,a3
- asr.w #2,d2
- asr.w #2,d7
- cmp.w d2,d7
- beq .noline
-
- bgt.s .lineonright
- .lineonleft:
- move.l #LEFTUVS,a3
- exg d0,d1
- exg d2,d7
-
- .lineonright:
-
- sub.w d2,d7
- asl.w #4,d2
- add.w d2,a3
-
- move.w d7,YDIFF
-
- move.w (a1,d0.w*4),d3 ;fx
- move.w (a1,d1.w*4),d7 ;sx
-
- sub.w d3,d7
- swap d3
- swap d7
- clr.w d3
- clr.w d7
- divs.l YDIFF-2,d7
- move.l d7,a0 ; dx
-
- move.l #UVCOORDS,a2
- move.l #ROTATEDPTS,a1
-
- move.w (a2,d0.w*4),d4
- move.w 2(a2,d0.w*4),d5
- move.w (a2,d1.w*4),d6
- move.w 2(a2,d1.w*4),d7
-
- sub.w d4,d6
- sub.w d5,d7
- swap d4
- swap d5
- clr.w d4
- clr.w d5
- swap d6
- swap d7
- clr.w d6
- clr.w d7
-
- divs.l YDIFF-2,d6
- divs.l YDIFF-2,d7
-
- move.l d6,a4
- move.l d7,a5
-
- asl.w #4,d0
- asl.w #4,d1
- move.l (a1,d0.w),d6
-
- move.l (a1,d1.w),d7
- asl.l #5,d6
- asl.l #5,d7
- sub.l d6,d7
- divs.l YDIFF-2,d7
- move.l d7,a2
- move.l d6,a6
-
- move.l 4(a1,d0.w),d6
- move.l 4(a1,d1.w),d7
- asl.l #5,d6
- asl.l #5,d7
- sub.l d6,d7
- divs.l YDIFF-2,d7
- exg d7,a6
- exg d7,d6
-
- move.l 8(a1,d0.w),d0
- move.l 8(a1,d1.w),d1
- swap d0
- swap d1
- clr.w d0
- clr.w d1
- asr.l #2,d0
- asr.l #2,d1
- sub.l d0,d1
- divs.l YDIFF-2,d1
- move.l d1,a1
- move.l YDIFF-2,d1
- subq #1,d1
-
- ; d3=sx a0=dsx
- ; d4=u a4=du
- ; d5=v a5=dv
- ; d6=x a2=dx
- ; d7=y a6=dy
- ; d0=z a1=dz
- ; d1=dsy
-
-
- add.l #128*65536,d6
- add.l #128*65536,d7
- add.l #128*65536,d0
-
- .PUTINLINE:
- swap d3
- move.w d3,(a3)+
- swap d3
- add.l a0,d3
- move.l d4,(a3)+
- add.l a4,d4
- move.l d5,(a3)+
- swap d6
- add.l a5,d5
- move.w d6,(a3)+
- swap d6
- swap d7
- add.l a2,d6
- move.w d7,(a3)+
- swap d7
- swap d0
- add.l a6,d7
- move.w d0,(a3)+
- swap d0
- add.l a1,d0
- dbra d1,.PUTINLINE
-
- .noline:
- rts
-
- TOPLINE: dc.w 0
- BOTLINE: dc.w 0
-
-
-
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
- **********************************************
-
- SIMPLESHADLINE:
- move.l #ROTATEDPTS,a1
- asl.l #2,d0
- asl.l #2,d1
- move.l 8(a1,d0.w*4),d2 ;fz
- move.l 8(a1,d1.w*4),d7 ;sz
-
- move.l #LEFTUVS,a3
- asr.l #2,d2
- asr.l #2,d7
- cmp.l d2,d7
- beq .noline
-
- bgt.s .lineonright
- .lineonleft:
- move.l #RIGHTUVS,a3
- exg d0,d1
- exg d2,d7
-
- .lineonright:
-
- sub.w d2,d7
- add.w #128,d2
- lea (a3,d2.w*8),a3
-
- move.w d7,YDIFF
-
- move.l (a1,d0.w*4),d3 ;fx
- move.l (a1,d1.w*4),d7 ;sx
-
- asl.l #5,d3
- asl.l #5,d7
-
- sub.l d3,d7
- divs.l YDIFF-2,d7
- move.l d7,a0 ; dx
-
- move.l #UVCOORDS,a2
- move.l #ROTATEDPTS,a1
-
- move.w (a2,d0.w),d4
- move.w 2(a2,d0.w),d5
- move.w (a2,d1.w),d6
- move.w 2(a2,d1.w),d7
-
- sub.w d4,d6
- sub.w d5,d7
- swap d4
- swap d5
- clr.w d4
- clr.w d5
- swap d6
- swap d7
- clr.w d6
- clr.w d7
-
- divs.l YDIFF-2,d6
- divs.l YDIFF-2,d7
-
- move.l d6,a4
- move.l d7,a5
-
- ; asl.w #4,d0
- ; asl.w #4,d1
-
- move.l 4(a1,d0.w*4),d6
- move.l 4(a1,d1.w*4),d7
- asl.l #5,d6
- asl.l #5,d7
- sub.l d6,d7
- divs.l YDIFF-2,d7
- exg d7,a6
- exg d7,d6
-
- move.l YDIFF-2,d1
- subq #1,d1
-
- ; d3=x a0=dx
- ; d4=u a4=du
- ; d5=v a5=dv
- ; d7=y a6=dy
- ; d1=dz
-
- move.w HIGHPOLY,d7
-
- add.l #128*65536,d3
- ; add.l #128*65536,d7
-
- .PUTINLINE:
- swap d3
- move.w d3,(a3)+
- swap d3
- add.l a0,d3
- swap d4
- move.w d4,(a3)+
- swap d4
- swap d5
- add.l a4,d4
- move.w d5,(a3)+
- swap d5
- add.l a5,d5
- ; swap d7
- move.w d7,(a3)+
- ; swap d7
- ; add.l a6,d7
- dbra d1,.PUTINLINE
-
- .noline:
- rts
-
-
- dc.w 0
- YDIFF: dc.w 0
-
- SPINAROUND: dc.w 0
- XCOS: dc.w 0
- YCOS: dc.w 0
- XSIN: dc.w 0
- YSIN: dc.w 0
- XCOS3: dc.w 0
- YCOS3: dc.w 0
- XSIN3: dc.w 0
- YSIN3: dc.w 0
- XCOS2: dc.w 0
- YCOS2: dc.w 0
- XSIN2: dc.w 0
- YSIN2: dc.w 0
- XADD: dc.l 0
- YADD: dc.l 0
- ZADD: dc.l 0
- XOFF: dc.w 0
- YOFF: dc.w 0
- OLDXM: dc.w 0
- OLDYM: dc.w 0
-
-
-
- TEXTUREADD: dc.w 0
-
- CALCLINE:
-
- moveq #0,d2
- moveq #0,d3
- moveq #0,d4
- moveq #0,d5
- move.l #UVCOORDS,a0
- move.w (a0,d0.w*4),d2
- swap d2
- move.w 2(a0,d0.w*4),d3
- swap d3
- move.w (a0,d1.w*4),d4
- swap d4
- move.w 2(a0,d1.w*4),d5
- swap d5
-
- move.l #ONSCREENPTS,a1
- move.w 2(a1,d0.w*4),d6 ; ly
- move.w 2(a1,d1.w*4),d7 ; ry
-
- asr.w #2,d6
- move.l #LEFTRIGHT+2,a2
- move.l #RIGHTUVS,a3
- asr.w #2,d7
- cmp.w d6,d7
- beq .noline
- bgt.s .lineonright
- .lineonleft:
- move.l #LEFTUVS,a3
- subq #2,a2
- exg d6,d7
- exg d0,d1
- exg d2,d4
- exg d3,d5
-
- ***********
- * THROW AWAY ABOVE FOR NOW.
- ***********
- .lineonright:
- sub.w d6,d7
- lea (a2,d6.w*4),a2
-
- movem.l d0-d7/a0-a6,-(a7)
- move.l #SUBSTACK,a0
- asl.w #2,d0
- asl.w #2,d1
- move.l #ROTATEDPTS,a1
- move.l a0,a2
- move.l 4(a1,d0.w*4),(a2)+ ;ty
- move.l 8(a1,d0.w*4),(a2)+ ;tz
- move.l 4(a1,d1.w*4),(a2)+ ;by
- move.l 8(a1,d1.w*4),(a2)+ ;bz
- move.l d2,(a2)+ ;tu
- move.l d3,(a2)+ ;tv
- move.l d4,(a2)+ ;bu
- move.l d5,(a2)+ ;bv
- move.l (a1,d0.w*4),(a2)+ ;tx
- move.l (a1,d1.w*4),(a2)+ ;bx
- move.l #0,a5
- bsr SUBDIVIDE
- move.l a5,MAXSUB
-
- movem.l (a7)+,d0-d7/a0-a6
-
- move.w (a1,d0.w*4),d2
- move.w 2(a1,d0.w*4),d3
- move.w (a1,d1.w*4),d4
- move.w 2(a1,d1.w*4),d5
-
- sub.w d2,d4 ;dx
- sub.w d3,d5 ;dy
- ;d7=ddy
-
- subq #1,d7
- swap d4
- clr.w d4
- swap d2
- clr.w d2
- asl.l #2,d4
- ext.l d5
- divs.l d5,d4 ;dx/dy
- .putinleftline
- swap d2
- move.w d2,(a2)
- addq #4,a2
- swap d2
- add.l d4,d2
- dbra d7,.putinleftline
-
- .noline:
- rts
-
- MAXSUB: dc.l 0
-
- SUBDIVIDE:
- add.l #1,a5
- move.l (a0),d0
- move.l d0,d4
- move.l 4(a0),d1
- divs d1,d0
- move.l 8(a0),d2
- add.l d2,d4
- and.b #%11111100,d0
- move.l d2,40+8(a0)
- add.w #128*4,d0
- move.l 12(a0),d3
- asr.l #1,d4 ; middle y
- move.l d3,40+12(a0)
- divs d3,d2
-
- and.b #%11111100,d2
- add.w #128*4,d2
-
- move.l d1,12(a3,d0.w*4)
- move.l d3,12(a3,d2.w*4)
- add.l d1,d3
- asr.l #1,d3
-
- move.l 16(a0),d5
- move.l d5,(a3,d0.w*4)
- move.l 24(a0),d6
- move.l d6,24+40(a0)
- add.l d6,d5
- asr.l #1,d5
- move.l d5,(a3,d2.w*4)
-
- move.l 20(a0),d6
- move.l d6,4(a3,d0.w*4)
- move.l 28(a0),d7
- move.l d7,28+40(a0)
- add.l d7,d6
- asr.l #1,d6
- move.l d7,4(a3,d2.w*4)
-
- move.l 32(a0),d7
- move.l d7,8(a3,d0.w*4)
- move.l 36(a0),d1
- move.l d1,36+40(a0)
- add.l d1,d7
- asr.l #1,d7
- move.l d1,8(a3,d2.w*4)
-
- sub.w d0,d2
- sub.w #4,d2
- ble.s .nomore
-
- move.l d4,40(a0) ;my
- move.l d4,8(a0)
-
- move.l d3,40+4(a0) ;mz
- move.l d3,12(a0)
- move.l d5,40+16(a0)
- move.l d5,16+8(a0)
- move.l d6,40+20(a0)
- move.l d6,20+8(a0)
- move.l d7,40+32(a0)
- move.l d7,36(a0)
-
- add.l #40,a0
- bsr SUBDIVIDE
- sub.l #1,a5
- sub.l #40,a0
- bsr SUBDIVIDE
- .nomore
- rts
-
- **********************************************************
-
- UVCOORDS: ds.l 4
- ROTATEDPTS: ds.l 4*4
- ONSCREENPTS: ds.l 4
-
- ZOFF: dc.w 1024
-
- LEFTRIGHT: ds.l 256
-
- POLYGONDATA:
-
- dc.w 27
-
- dc.w $8000+1*256+0
- dc.w 0,0
- dc.w -200,150,200,0,0
- dc.w 0,200,200,63,0
- dc.w 0,250,0,63,63
- dc.w -200,200,0,0,63
-
- dc.w $8000+0*256+3
- dc.w 0,0
- dc.w 0,200,200,0,0
- dc.w 200,150,200,63,0
- dc.w 200,200,0,63,63
- dc.w 0,250,0,0,63
-
- dc.w $8000+0*256+3
- dc.w 0,0
- dc.w -200,200,0,0,0
- dc.w 0,250,0,63,0
- dc.w 0,200,-200,63,63
- dc.w -200,150,-200,0,63
-
- dc.w $8000+1*256+0
- dc.w 0,0
- dc.w 0,250,0,0,0
- dc.w 200,200,0,63,0
- dc.w 200,150,-200,63,63
- dc.w 0,200,-200,0,63
-
- cr EQU 120
-
- ****************************
-
-
- dc.w 3*256+3
- dc.w 2,0
- dc.w -cr,cr,cr,0,0
- dc.w cr,cr,cr,63,0
- dc.w cr,cr,-cr,63,63
- dc.w -cr,cr,-cr,0,63
-
- ; dc.w $8000+0*256+2
- ; dc.w 2,0
- ; dc.w cr,-cr,cr,0,0
- ; dc.w -cr,-cr,cr,63,0
- ; dc.w -cr,-cr,-cr,63,63
- ; dc.w cr,-cr,-cr,0,63
-
- dc.w $8000+0*256+2
- dc.w 2,0
- dc.w cr,cr,cr,16,16
- dc.w cr,-cr,cr,48,16
- dc.w cr,-cr,-cr,48,48
- dc.w cr,cr,-cr,16,48
-
- dc.w $8000+0*256+2
- dc.w 2,0
- dc.w -cr,-cr,cr,16,16
- dc.w -cr,cr,cr,48,16
- dc.w -cr,cr,-cr,48,48
- dc.w -cr,-cr,-cr,16,48
-
- dc.w $8000+0*256+2
- dc.w 2,0
- dc.w -cr,-cr,cr,16,16
- dc.w cr,-cr,cr,48,16
- dc.w cr,cr,cr,48,48
- dc.w -cr,cr,cr,16,48
-
- dc.w $8000+0*256+2
- dc.w 2,0
- dc.w cr,-cr,-cr,16,16
- dc.w -cr,-cr,-cr,48,16
- dc.w -cr,cr,-cr,48,48
- dc.w cr,cr,-cr,16,48
-
- ****************************
-
-
- th equ 40
- ir equ 40
- ot equ 80
-
- *****************************
-
- ; dc.w 3*256+2
- ; dc.w 1,0
- ; dc.w -ir,-ir,-th,0,0
- ; dc.w ir,-ir,-th,63,0
- ; dc.w ir,-ir,th,63,15
- ; dc.w -ir,-ir,th,0,15
-
- dc.w 3*256+2
- dc.w 1,0
- dc.w ir,-ot,-th,0,0
- dc.w ir,ir,-th,63,0
- dc.w ir,ir,th,63,15
- dc.w ir,-ot,th,0,15
-
-
- dc.w 3*256+2
- dc.w 1,0
- dc.w ir,ir,-th,0,0
- dc.w -ir,ir,-th,63,0
- dc.w -ir,ir,th,63,15
- dc.w ir,ir,th,0,15
-
-
- dc.w 3*256+2
- dc.w 1,0
- dc.w -ir,ir,-th,0,0
- dc.w -ir,-ot,-th,63,0
- dc.w -ir,-ot,th,63,15
- dc.w -ir,ir,th,0,15
-
-
- *****************************
-
- *******************
- ; dc.w 3*256+2
- ; dc.w 1,0
- ; dc.w -ot,-ot,-th,0,0
- ; dc.w ot,-ot,-th,63,0
- ; dc.w ir,-ir,-th,55,7
- ; dc.w -ir,-ir,-th,7,7
-
- dc.w 3*256+2
- dc.w 1,0
- dc.w ot,-ot,-th,63,0
- dc.w ot,ot,-th,63,63
- dc.w ir,ir,-th,56,55
- dc.w ir,-ot,-th,56,0
-
- dc.w 3*256+2
- dc.w 1,0
- dc.w ot,ot,-th,63,63
- dc.w -ot,ot,-th,0,63
- dc.w -ir,ir,-th,8,55
- dc.w ir,ir,-th,55,55
-
- dc.w 3*256+2
- dc.w 1,0
- dc.w -ot,ot,-th,0,63
- dc.w -ot,-ot,-th,0,0
- dc.w -ir,-ot,-th,7,0
- dc.w -ir,ir,-th,7,55
- **********************
-
- *******************
- ; dc.w 3*256+2
- ; dc.w 1,0
- ; dc.w ot,-ot,th,0,0
- ; dc.w -ot,-ot,th,63,0
- ; dc.w -ir,-ir,th,55,7
- ; dc.w ir,-ir,th,7,7
-
- dc.w 3*256+2
- dc.w 1,0
- dc.w -ot,-ot,th,63,0
- dc.w -ot,ot,th,63,63
- dc.w -ir,ir,th,56,55
- dc.w -ir,-ot,th,56,0
-
- dc.w 3*256+2
- dc.w 1,0
- dc.w -ot,ot,th,63,63
- dc.w ot,ot,th,0,63
- dc.w ir,ir,th,8,55
- dc.w -ir,ir,th,55,55
-
- dc.w 3*256+2
- dc.w 1,0
- dc.w ot,ot,th,0,63
- dc.w ot,-ot,th,0,0
- dc.w ir,-ot,th,7,0
- dc.w ir,ir,th,7,55
- **********************
-
- *****************************
-
- dc.w 3*256+2
- dc.w 1,0
- dc.w -ot,ot,-th,0,0
- dc.w ot,ot,-th,63,0
- dc.w ot,ot,th,63,15
- dc.w -ot,ot,th,0,15
-
- dc.w 3*256+2
- dc.w 1,0
- dc.w -ot,-ot,-th,0,0
- dc.w -ot,ot,-th,63,0
- dc.w -ot,ot,th,63,15
- dc.w -ot,-ot,th,0,15
-
- dc.w 3*256+2
- dc.w 1,0
- dc.w ot,-ot,-th,0,0
- dc.w ir,-ot,-th,63,0
- dc.w ir,-ot,th,63,15
- dc.w ot,-ot,th,0,15
-
- dc.w 3*256+2
- dc.w 1,0
- dc.w -ir,-ot,-th,0,0
- dc.w -ot,-ot,-th,63,0
- dc.w -ot,-ot,th,63,15
- dc.w -ir,-ot,th,0,15
-
- dc.w 3*256+2
- dc.w 1,0
- dc.w ot,ot,-th,0,0
- dc.w ot,-ot,-th,63,0
- dc.w ot,-ot,th,63,15
- dc.w ot,ot,th,0,15
-
-
- *****************************
-
- ****************************
-
-
- ; dc.w $8000+0*256+2
- ; dc.w 2,0
- ; dc.w -cr,-cr,cr,0,0
- ; dc.w cr,-cr,cr,63,0
- ; dc.w cr,-cr,-cr,63,63
- ; dc.w -cr,-cr,-cr,0,63
-
- dc.w 3*256+3
- dc.w 2,0
- dc.w cr,cr,cr,0,0
- dc.w -cr,cr,cr,63,0
- dc.w -cr,cr,-cr,63,63
- dc.w cr,cr,-cr,0,63
-
- dc.w $8000+0*256+2
- dc.w 2,0
- dc.w -cr,cr,cr,16,16
- dc.w -cr,-cr,cr,48,16
- dc.w -cr,-cr,-cr,48,48
- dc.w -cr,cr,-cr,16,48
-
- dc.w $8000+0*256+2
- dc.w 2,0
- dc.w cr,-cr,cr,16,16
- dc.w cr,cr,cr,48,16
- dc.w cr,cr,-cr,48,48
- dc.w cr,-cr,-cr,16,48
-
- dc.w $8000+0*256+2
- dc.w 2,0
- dc.w -cr,-cr,-cr,16,16
- dc.w cr,-cr,-cr,48,16
- dc.w cr,cr,-cr,48,48
- dc.w -cr,cr,-cr,16,48
-
- dc.w $8000+0*256+2
- dc.w 2,0
- dc.w cr,-cr,cr,16,16
- dc.w -cr,-cr,cr,48,16
- dc.w -cr,cr,cr,48,48
- dc.w cr,cr,cr,16,48
-
-
- ****************************
-
-
- SINETABLE:
- incbin "ab3:includes/bigsine"
-
-
- YANG: dc.w 0
- XANG: dc.w 0
-
- **********************************************************
-
- * the definition of the screen - note that in assembler you
- * MUST get the sizes of these fields correct, by consulting either
- * the RKM or the header files
-
-
- MyNewScreen dc.w 0,0 left, top
- dc.w 320,256 width, height
- dc.w 8 depth
- dc.b 0,1 pens
- dc.w 0 viewmodes
- dc.w CUSTOMSCREEN type
- dc.l MyFont font
- dc.l screen_title title
- dc.l 0 gadgets
- dc.l 0 bitmap
-
- * my font definition
- MyFont dc.l font_name
- dc.w TOPAZ_SIXTY
- dc.b FS_NORMAL
- dc.b FPF_ROMFONT
-
- * the variables
- _IntuitionBase dc.l 0 Intuition lib pointer
- _GfxBase dc.l 0 graphics lib pointer
- MyScreen dc.l 0
- MyWindow dc.l 0
- MyNewWindow ds.b nw_SIZE a buffer
-
-
- * some strings
- int_name INTNAME
- graf_name GRAFNAME
- hello_message dc.b 'Hello World'
-
- * these are C strings, so have to be null terminated
- screen_title dc.b 'My Own Screen',0
- font_name dc.b 'topaz.font',0
- window_title dc.b 'A Simple Window',0
-
- even
-
- xmouse: dc.w 0
- ymouse: dc.w 0
-
- spleen: dc.w 0
- lastspleen: dc.w 0
-
- COPIEDPAL:
- dc.w 256,0
- ds.l 3*256
- ds.l 10
-
- SHADOWBUFFER: ds.l 65536/4
-
- PALETTEBIT:
- ; incbin "256palette"
- ; dc.w $ffff,$fffe
-
- incbin "ab3:includes/256pal"
-
- include "ab3:source_4000/chunky.s"
-
- willy: ds.w 48
-
-
- PALS:
- ds.l 2*49
-
-
- FRAME: dc.w 4
- FLIBBLE: dc.w 0
-
- FASTBUFFER:
- dc.l fasty
-
- fasty: ds.b 320*256
-
-
- SUBSTACK: ds.l 10*10*10
-
- LEFTUVS: ds.w 8*256
- RIGHTUVS: ds.w 8*256
-
- WORLD: incbin "ab3:includes/world"
-
- TWEEN: incbin "ab3:includes/tweenbrightfile"
-
- TEXTURES: incbin "ab3:includes/newtexturemaps"
-
- SECTION BGDROP,code_c
-
- RAWSCRN:
- ds.l 2560*8
-